@烟雨
2年前 提问
1个回答
代码层防御SQL注入的措施有哪些
Andrew
2年前
代码层防御SQL注入的措施有以下这些:
采用强类型语言,如Java、C#等强类型语言几乎可以完全忽略数字型注入。
尽可能避免使用拼接的动态SQL语句,所有的查询语句都使用数据库提供的参数化查询接口。参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中。
在服务器端验证用户输入的值和类型是否符合程序的预期要求,检查字段是否为空,要求其长度大于零,不包括行距和后面的空格。或者检查输入字段长度是否符合预期要求。
在服务器端对用户输入进行过滤。针对非法的HTML字符和关键字,可以编写函数对其进行检查或过滤。
避免网站显示SQL错误信息,如类型错误、字段不匹配等,防止攻击者利用这些错误信息进行一些判断。
配置可信任的IP接入和访问,如IPSec,控制哪些机器能够与数据库服务器通信。从数据库服务器上移除所有的示例脚本和应用程序。
不应使用sa、dba或admin等具备数据库DBA权限的账户,为每一个应用程序的数据库的连接账户使用一个专用的最低权限账户。如果应用程序仅需要读取访问,应将数据库的访问限制为只读。
应用程序尽量使用存储过程,利用存储过程,将数据访问抽象化,使用户不能直接访问表或视图。存储过程是在大型数据库系统中,为了完成特定功能或经常使用的一组SQL语句集,经编译后存储在数据库中。存储过程具有较高的安全性,可以防止SQL注入。不过,如果编写不当,依然有SQL注入的风险。